/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.vraptor.jpessoal.DAO;

import br.com.caelum.vraptor.ioc.Component;
import br.com.vraptor.jpessoal.bean.Funcionalidade;
import br.com.vraptor.jpessoal.util.HibernateUtil;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;

@Component
public class FuncionalidadeDao {
    
    public List<Funcionalidade> listar(){
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Query query = session.createQuery("from Funcionalidade");
        List<Funcionalidade> lista = query.list();
        session.getTransaction().commit();
                
        return lista;        
    }
    
    public Funcionalidade obterPorId(Integer id){
        
        Session session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        Query query = session.createQuery("from Funcionalidade where id = :id ");
        query.setParameter("id", id);
        Funcionalidade funcionalidade = (Funcionalidade) query.uniqueResult();
        session.getTransaction().commit();
                
        return funcionalidade;
    }
    
    public void salvar(Funcionalidade funcionalidade){
        
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        session.save(funcionalidade);
        session.getTransaction().commit();
    }
    
    public void atualizar(Funcionalidade funcionalidade){
        
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        session.update(funcionalidade);
        session.getTransaction().commit();
    }
    
        public Boolean atualizarPerfilFuncionalidade(String[] tokens, Integer idPerfil){
        
        Boolean flag = true;
        
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Query query = session.createSQLQuery("DELETE from tb_perfil__funcionalidade WHERE cod_perfil = :perfil");
        query.setParameter("perfil", idPerfil);
        query.executeUpdate();
        
        if(tokens.length > 0){
            Query incluide = session.createSQLQuery("INSERT INTO tb_perfil__funcionalidade (cod_perfil, cod_funcionalidade) VALUES (:perfil, :funcionalidade)");
            incluide.setParameter("perfil", idPerfil);
            for (int i = 0; i < tokens.length; i++) {
                incluide.setParameter("funcionalidade", tokens[i]);
                incluide.executeUpdate();
            }
        }
        session.getTransaction().commit();
        return flag;
    }
    
    
}
